热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python正则表达式详解:掌握数量词用法轻松上手

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python正则表达式(一看就懂)相关的知识,希望对你有一定的参考价值。 目录 哈喽O(∩_∩)O😄 什么是正则表达式(⊙_⊙) 简

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python正则表达式(一看就懂)相关的知识,希望对你有一定的参考价值。


目录

哈喽O(∩_∩)O😄

什么是正则表达式(⊙_⊙)

简单说,正则表达式是…

正则表达式怎么用❓

sreach的用法🍊

匹配连续的多个数值🍉

 字符"+"重复前面一个匹配字符一次或者多次🍉

字符"*"重复前面一个匹配字符零次或者多次🍉

字符"?"重复前面一个匹配字符零次或者一次🍉

特殊字符使用反斜杠"“引导,例如”\\r"、"\\n"、"\\t"、"\\"分别表示回车、换行、制表符号与反斜线自己本身

 完整表🔍

 match用法🤔

match用法😃

 match对象🍊

数量词🍊

匹配开头、结尾🍊

 匹配分组🔍

match总结😄

实践出真知 凸(`0´)凸 ☀️

写在最后🧐





哈喽O(∩_∩)O😄

今天来发一下python正则表达式,其实这个也是比较简单的

肝了好几个小时才写出来呀


什么是正则表达式(⊙_⊙)

目前越来越多的网站、编辑器、编程语言都已支持一种叫“正则表达式”的字符串查找“公式”,有过编程经验的同学都应该了解正则表达式(Regular Expression 简写regex)是什么东西,它是一种字符串匹配的模式(pattern),更像是一种逻辑公式。


简单说,正则表达式是…

python中必备的工具,主要是用来查找和匹配字符串的。

正则表达式尤其在python爬虫上用的多。


正则表达式怎么用❓

首先,我们要导入头文件(写c++写习惯了)模块

import re

因为re是内置模块,所以不需要额外安装,就很银杏


sreach的用法🍊


匹配连续的多个数值🍉


import re
r=r"\\d+"
m=re.search(r,"YRYR567eruwgf")#目标是567
print(m)

re模块中,r“\\d+”正则表达式表示匹配连续的多个数值,search是re中的函数,从"YRYR567eruwgf"字符串中搜索连续的数值,得到"567"

结果:

可以看到,搜索到了连续值“567”


 字符"+"重复前面一个匹配字符一次或者多次🍉

import re
r=r"b\\d+"
m=re.search(r,"a12b1233cd")
print(m)

 这样,结果就是b后面的连续数字

结果:


字符"*"重复前面一个匹配字符零次或者多次🍉

“*" 与 "+"类似,但有区别,列如:
可见 r"ab+“匹配的是"ab”,但是r"ab
 “匹配的是"a”,因为表示"b"可以重复零次,但是”+“却要求"b"重复一次以上

import re
r=r"ab+"
m=re.search(r,"acabc")
print(m)
r=r"ab*"
m=re.search(r,"acabc")
print(m)

 结果:


字符"?"重复前面一个匹配字符零次或者一次🍉

匹配结果"ab”,重复b一次 

import re
r=r"ab?"
m=re.search(r,"abbcabc")
print(m)

 结果:


特殊字符使用反斜杠"“引导,例如”\\r"、"\\n"、"\\t"、"\\"分别表示回车、换行、制表符号与反斜线自己本身


import re
r=r"a\\nb"
m=re.search(r,"ca\\nbcaba")
print(m)

 结果:


 完整表🔍

其实上面说这些都是比较基础,比较简单的,还有复杂一点的,都在这张表里


 match用法🤔


match用法😃

语法:re.match(pattern, string[, flags])  

从首字母开始开始匹配,string如果包含pattern子串,则匹配成功,返回Match对象,失败则返回None,若要完全匹配,pattern要以$结尾。

#示例:
name='张三'
if re.match('张\\w+',name):
print(',你好!'.format(name))
# 张三,你好!

输出结果:张三,你好

张三:谁叫我?

不开玩笑了,继续

总的来说,match就是


  • 返回匹配的match对象
  • 默认从给定字符串的开头开始匹配、即使正则表达式没有用^声明匹配开头

 match对象🍊

Match对象的几个属性: 

注意,前面是有“.”的
1..string 待匹配的文本
2..re 匹配使用的pattern对象
3..pos 正则表达式搜索文本的开始位置
4..endpos 正则表达式搜索文本的结束位置
Match对象的几个方法: 
1.group(0) 返回匹配到的子串
2.start() 返回匹配子串的开始位置
3.end() 返回匹配子串的结束位置
4.span() 返回start()、end()


数量词🍊


匹配开头、结尾🍊



 匹配分组🔍

好了,看了上面几张表,其实我觉得最重要的在下面  


match总结😄

其实没啥好总结的,但你要看懂这张图,这个很重要

 我框出来的是我自己感觉经常用的

其实我自己刚学的时候也听不懂,现在觉得可简单了

所以,你应该现在就觉得很简单吧?

但是,正则表达式的字符很多,容易记混,一不小心就好几十个报错,很让人崩溃


实践出真知 凸(`0´)凸 ☀️

学了这么多,是不是想撸个程序了?

已经给你准备好了

程序效果:输入手机号,通过正则表达式判断手机号合不合法,

如果合法,就输出这个手机号的信息(所属地等)

如果不合法,就重新输入,简单吧?

这里我想重点说一下怎么获取手机号的信息

我一开始打算上网上百度一波的,没想到直接复制过来23个报错、我也是醉了

哎呀,不能再发表情包了


ε=(´ο`*)))唉,还是自己写吧、、、

我想起了有个模块叫phone,可以实现这个功能

但是你可能还没有安装这个模块,要按命令行模式下输入pip install phone

等个六六四十九秒就下载下来了

然后你就可以体验一下了

代码(PyCharm运行通过)

import phone
from time import *
import re
def begin():
print("欢迎来到查询小程序")
print("1.查询")
print("2.用户")
def p(n):
if re.match(r'1[3,4,5,7,8]\\d9', n):
if re.match(r'13[0,1,2]\\d8', n) or \\
re.match(r"15[5,6]\\d8", n) or \\
re.match(r"18[5,6]", n) or \\
re.match(r"145\\d8", n) or \\
re.match(r"176\\d8", n):
return True
elif re.match(r"13[4,5,6,7,8,9]\\d8", n) or \\
re.match(r"147\\d8|178\\d8", n) or \\
re.match(r"15[0,1,2,7,8,9]\\d8", n) or \\
re.match(r"18[2,3,4,7,8]\\d8", n):
return True
else:
return True
else:
return False
if __name__ == "__main__":
s=0
begin()
while True:
op = int(input("请输入:"))
if op==1:
phoneNum = str(input("请输入你的电话号码"))
if p(phoneNum)==False:
print("该手机号无效")
for i in range(100):
print('\\n')
begin()
else:
info = phone.Phone().find(phoneNum)
print("手机号码:"+str(info["phone"]))
print("手机所属地:"+str(info["province"])+"省"+str(info["city"])+"市")
print("邮政编号:"+str(info["zip_code"]))
print("区域号码:"+str(info["area_code"]))
print("手机类型:"+str(info["phone_type"]))
s+=1
i = input("输入任意数退出...")
for i in range(100):
print('\\n')
begin()
if op==2:
print("使用次数:"+str(s))
i = input("输入任意数退出...")
for i in range(100):
print('\\n')
begin()

写在最后🧐

感觉这次的博客好像比较长,你能看到这里,已经超越了60%的人了,如果有谁还不是很明白,或者有c++和python的问题,都可以私信我,我看到后会一一回复哦

另外,互粉必回💪

感谢您的阅读,拜拜!


推荐阅读
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 最近同事提了一个需求过来,他觉得项目对于第三方日志记录的太多了,只想记录一些业务相关的日志减少对于框架日志的显示。具体要求就是对于框架日志只显示warn等级以上的,而业务日志显示info等级以上 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • Coursera ML 机器学习
    2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
  • 本文介绍如何使用MFC和ADO技术调用SQL Server中的存储过程,以查询指定小区在特定时间段内的通话统计数据。通过用户界面选择小区ID、开始时间和结束时间,系统将计算并展示小时级的通话量、拥塞率及半速率通话比例。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 本文探讨了2019年前端技术的发展趋势,包括工具化、配置化和泛前端化等方面,并提供了详细的学习路线和职业规划建议。 ... [详细]
  • Win10 UWP 开发技巧:利用 XamlTreeDump 获取 XAML 元素树
    本文介绍如何在 Win10 UWP 开发中使用 XamlTreeDump 库来获取和转换 XAML 元素树为 JSON 字符串,这对于 UI 单元测试非常有用。 ... [详细]
  • 本教程将深入探讨C#编程语言中的条件控制结构,包括if语句和switch语句的使用方法。通过本课的学习,您将掌握如何利用这些控制结构来实现程序的条件分支逻辑。 ... [详细]
  • Linux环境下C语言实现定时向文件写入当前时间
    本文介绍如何在Linux系统中使用C语言编程,实现在每秒钟向指定文件中写入当前时间戳。通过此示例,读者可以了解基本的文件操作、时间处理以及循环控制。 ... [详细]
  • MongoDB的核心特性与架构解析
    本文深入探讨了MongoDB的核心特性,包括其强大的查询语言、灵活的文档模型以及高效的索引机制。此外,还详细介绍了MongoDB的体系结构,解释了其文档、集合和数据库的层次关系,并对比了MongoDB与传统关系型数据库(如MySQL)的逻辑结构。 ... [详细]
  • 深入分析十大PHP开发框架
    随着PHP技术的发展,各类开发框架层出不穷,成为了开发者们热议的话题。本文将详细介绍并对比十款主流的PHP开发框架,旨在帮助开发者根据自身需求选择最合适的工具。 ... [详细]
  • Microsoft即将发布WPF/E的CTP(Community Technology Preview)和SDK,标志着RIA(Rich Internet Application)技术的新里程碑。更多详情及下载链接请参见MSDN官方页面。 ... [详细]
  • 探讨了汉字在计算机系统中的字符占用情况,以及在使用SQL Server 2000进行特定条件查询时遇到的问题,特别是针对姓氏为‘刘’的学生记录的查询。 ... [详细]
  • 本文基于《Linux命令行与Shell脚本编程大全》第三版的第十一章内容,探讨了如何构建基本的Shell脚本,包括命令组合、脚本创建、消息显示、变量使用、输入输出重定向、管道、数学运算及脚本退出等方面的知识。 ... [详细]
author-avatar
Mrheartheart
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有